﻿// WheelTimer.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <ctime>
#include <chrono>
#include <thread>
#include "TimeWheelScheduler.hpp"
void add() { 
	static auto last = std::chrono::steady_clock::now();
	auto now = std::chrono::steady_clock::now();
	std::cout << (now - last) / std::chrono::milliseconds(1) << std::endl;
	last = now;
		
}
int main()
{
	TimeWheelScheduler<std::chrono::steady_clock,
		10, 10, 6, 6, 6, 5> scheduler;
	scheduler.Start();

	std::thread thread = std::thread([&scheduler]() {
		std::chrono::steady_clock::time_point *tp = 
			new std::chrono::steady_clock::time_point[1000];
		uint32_t ids[1000] = { 0 };
		for (size_t i = 0; i < 1000; i++)
		{
			std::chrono::steady_clock::time_point& last = tp[i] = std::chrono::steady_clock::now();
			uint32_t &id = ids[i];
			id = scheduler.RegTimer(std::chrono::seconds(2),
			    std::chrono::seconds(1), [&last, &id]() {
					auto now = std::chrono::steady_clock::now();
					if (id == 999)
					{
						std::cout << "id: " << id << " " << (now - last) / std::chrono::milliseconds(1) << '\n';

					}
			        last = now; 
				}
		);
		}
		std::this_thread::sleep_for(std::chrono::seconds(1000));
		});

    std::cout << "Hello World!\n";
	std::this_thread::sleep_for(std::chrono::seconds(300));

	//scheduler.UnregTimer(id);
	//std::cout << "UnregTimer " << id << std::endl;
	//std::this_thread::sleep_for(std::chrono::seconds(5));
	std::cout << "stop!\n";
	scheduler.Stop();
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
